package com.stwyj.sbd;

import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.rules.DbType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

/**
 *<p>
 * mybatis-plus generator数据库表映射生成数据文件
 *</p>
 *
 * @author stwyj
 * @since 2018/12/3
 */
public class CustomGenerator {

    // 输出目录
    private static String outPutDir = "D:\\idea-workspace\\stwyj\\stwyj-springboot-demo\\src\\main\\java";
    private static String author = "stwyj";
    private static String jdbcUrl = "jdbc:mysql://localhost:3306/demo?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=UTF-8&generateSimpleParameterMetadata=true";
    private static String username = "root";
    private static String password = "root";

    private static String parent = "com.stwyj.sbd";

    private static String[] include = new String[]{"user"};

    private static String[] exclude = new String[]{};

    public static void main(String[] args) throws InterruptedException {
        AutoGenerator mpg = new AutoGenerator();

        // 全局配置
        GlobalConfig gc = new GlobalConfig();
        gc.setOutputDir(outPutDir);
        gc.setFileOverride(true);
        gc.setActiveRecord(true);
        gc.setEnableCache(false);// XML 二级缓存
        gc.setBaseResultMap(true);// XML ResultMap
        gc.setBaseColumnList(true);// XML columList
        gc.setAuthor(author);

        // 自定义文件命名，注意 %s 会自动填充表实体属性！
        gc.setMapperName("%sMapper");
        gc.setXmlName("%sMapper");
        gc.setServiceName("%sService");
        gc.setServiceImplName("%sServiceImpl");
        gc.setControllerName("%sController");
        mpg.setGlobalConfig(gc);

        // 数据源配置
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setDbType(DbType.MYSQL);

        dsc.setDriverName("com.mysql.cj.jdbc.Driver");
        dsc.setUrl(jdbcUrl);
        dsc.setUsername(username);
        dsc.setPassword(password);
        mpg.setDataSource(dsc);

        // 策略配置
        StrategyConfig strategy = new StrategyConfig();
        strategy.setNaming(NamingStrategy.underline_to_camel);// 表名生成策略
        strategy.setInclude(include); // 需要生成的表
        strategy.setExclude(exclude); // 排除生成的表
        mpg.setStrategy(strategy);

        // 包配置
        PackageConfig pc = new PackageConfig();
        pc.setParent(parent);
        pc.setEntity("entity.po");
        pc.setService("service");
        pc.setServiceImpl("service.impl");
        pc.setMapper("dao.mapper");
        pc.setXml("xml");
        mpg.setPackageInfo(pc);


        // 自定义模板配置，可以 copy 源码 mybatis-plus/src/main/resources/templates 下面内容修改，
        // 放置自己项目的 src/main/resources/templates 目录下, 默认名称一下可以不配置，也可以自定义模板名称
        TemplateConfig tc = new TemplateConfig();
        tc.setController(null);  // 不生成Controller
        tc.setService(null);
        tc.setServiceImpl(null);
        //        tc.setEntity("entity.po");
        //        tc.setMapper("dao.mapper");
        //        tc.setXml("xml");
        //        tc.setService("service");
        //        tc.setServiceImpl("service.impl");
        //        tc.setController(null);

        // 如上任何一个模块如果设置 空 OR Null 将不生成该模块。
        mpg.setTemplate(tc);

        // 执行生成
        mpg.execute();
    }

}